package com.xsf.jieyou.provider.fallback;

import com.xsf.jieyou.provider.domain.TbUser;
import lombok.extern.slf4j.Slf4j;

/**
 * 用户服务提供者熔断器 Dubbo Sentinel。
 * <p>
 * Description:TODO
 * </p>
 *
 * @author xsf
 * @version v1.0.0
 * @date 2019/11/15 0015 3:13
 * @see com.xsf.jieyou.provider.fallback
 **/
@Slf4j
public class TbUserServiceFallback {
    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param tbUser {@link TbUser} 用户
     * @param ex     {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static int insertTbUserFallback(TbUser tbUser, Throwable ex) {
        log.warn("新增用户服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return -1;
    }

    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param tbUser {@link TbUser} 用户
     * @param ex     {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static int updateTbUser(TbUser tbUser, Throwable ex) {
        log.warn("更新用户服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return -1;
    }

    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param username {@link String} 用户名
     * @param ex       {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static TbUser getTbUserFallback(String username, Throwable ex) {
        log.warn("查询用户服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return null;
    }

    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param tbUser {@link TbUser} 用户
     * @param ex     {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static TbUser getTbUserFallback(TbUser tbUser, Throwable ex) {
        log.warn("查询用户服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return null;
    }

    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param userId {@link Long} 用户ID
     * @param ex     {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static TbUser getTbUserFallback(Long userId, Throwable ex) {
        log.warn("查询用户服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return null;
    }

    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param ex     {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static int validateUsername(String username, Throwable ex) {
        log.warn("用户名唯一性校验服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return -1;
    }

    /**
     * 熔断方法，注意：必须为静态方法 static。
     *
     * @param ex     {@link Throwable} 异常信息
     * @return {@link Integer} 熔断后的固定结果
     */
    public static int validatePhoneNum(String phone, Throwable ex) {
        log.warn("手机号唯一性校验服务 - 触发Sentinel熔断 : " + ex.getClass().getTypeName());
        ex.printStackTrace();
        return -1;
    }
}
